package com.sheng.leetcode.year2023.month07.day06;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * @author liusheng
 * @date 2023/07/06
 * <p>
 * 2178. 拆分成最多数目的正偶数之和<p>
 * <p>
 * 给你一个整数 finalSum 。请你将它拆分成若干个 互不相同 的正偶数之和，且拆分出来的正偶数数目 最多 。<p>
 * 比方说，给你 finalSum = 12 ，那么这些拆分是 符合要求 的（互不相同的正偶数且和为 finalSum）：<p>
 * (2 + 10) ，(2 + 4 + 6) 和 (4 + 8) 。它们中，(2 + 4 + 6) 包含最多数目的整数。<p>
 * 注意 finalSum 不能拆分成 (2 + 2 + 4 + 4) ，因为拆分出来的整数必须互不相同。<p>
 * 请你返回一个整数数组，表示将整数拆分成 最多 数目的正偶数数组。<p>
 * 如果没有办法将 finalSum 进行拆分，请你返回一个 空 数组。你可以按 任意 顺序返回这些整数。<p>
 * <p>
 * 示例 1：<p>
 * 输入：finalSum = 12<p>
 * 输出：[2,4,6]<p>
 * 解释：以下是一些符合要求的拆分：(2 + 10)，(2 + 4 + 6) 和 (4 + 8) 。<p>
 * (2 + 4 + 6) 为最多数目的整数，数目为 3 ，所以我们返回 [2,4,6] 。<p>
 * [2,6,4] ，[6,2,4] 等等也都是可行的解。<p>
 * <p>
 * 示例 2：<p>
 * 输入：finalSum = 7<p>
 * 输出：[]<p>
 * 解释：没有办法将 finalSum 进行拆分。<p>
 * 所以返回空数组。<p>
 * <p>
 * 示例 3：<p>
 * 输入：finalSum = 28<p>
 * 输出：[6,8,2,12]<p>
 * 解释：以下是一些符合要求的拆分：(2 + 26)，(6 + 8 + 2 + 12) 和 (4 + 24) 。<p>
 * (6 + 8 + 2 + 12) 有最多数目的整数，数目为 4 ，所以我们返回 [6,8,2,12] 。<p>
 * [10,2,4,12] ，[6,2,4,16] 等等也都是可行的解。<p>
 * <p>
 * 提示：<p>
 * 1 <= finalSum <= 10^10<p>
 * <p>
 * 来源：力扣（LeetCode）<p>
 * 链接：<a href="https://leetcode.cn/problems/maximum-split-of-positive-even-integers">2178. 拆分成最多数目的正偶数之和</a><p>
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。<p>
 */
public class LeetCode2178 {

    @Test
    public void test01() {
//        long finalSum = 12;
//        long finalSum = 7;
        long finalSum = 28;
        System.out.println(new Solution().maximumEvenSplit(finalSum));
    }
}

class Solution {
    public List<Long> maximumEvenSplit(long finalSum) {
        long i = 2;
        List<Long> list = new ArrayList<>();
        if (finalSum % 2 != 0) {
            return list;
        }
        while (finalSum - i > i) {
            list.add(i);
            finalSum -= i;
            i += 2;
        }
        if (finalSum % 2 == 0) {
            list.add(finalSum);
        }
        return list;
    }
}
